#ifndef __TOOLSCLIENTSERVER_H__
#define __TOOLSCLIENTSERVER_H__

/**
 * @file toolsclientserver.h
 * @brief outils pour le client et le serveur de fichier.
 * @author Florian.B
 * @version 0.1
 * @date 11 avril 2012
 *
 * Divers outils permettant le dialogue entre le client et le serveur.
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

#ifdef _WIN32
# include <process.h>
# include <BaseTsd.h>
# include <winsock2.h>
# include <ws2tcpip.h>
typedef SSIZE_T ssize_t;
#define SHUT_RDWR 2
#else
# include <netdb.h>
# include <unistd.h>
#endif

/**
 * @enum ToolsCSReturn
 * @brief Constantes de retour.
 *
 * ToolsCSReturn est une série de constantes prédéfinies pour diverses futures fonctions de l'objet ToolsClientServer.
 */
typedef enum
  {
    TOOLSCSRETURN_SUCCESS, /*!< Succès */
    TOOLSCSRETURN_ERR, /*!< Erreur */
    TOOLSCSRETURN_CON_ERR /*!< Problème de connexion */
  }ToolsCSReturn;

/**
 * @fn ToolsCSReturn send_ToolsCS(int socket, const char *message)
 * @brief Fonction qui envoie un message à la socket au format texte.
 *
 * @param socket La socket de destination.
 * @param message Le message à envoyer.
 * @return TOOLSCS_SUCCESS en cas de succès et TOOLSCS_ERR sinon.
 */
ToolsCSReturn send_ToolsCS(int socket, const char *message);

/**
 * @fn ToolsCSReturn receive_ToolsCS(char **reception, int socket)
 * @brief Fonction qui réceptionne une commande de la socket.
 *
 * @param[in,out] reception La commande sera contenu dans reception. @warning reception doit être libéré par la suite.
 * @return TOOLSCSRETURN_ERR en cas d'erreur et TOOLSCSRETURN_SUCCESS sinon.
 */
ToolsCSReturn receive_ToolsCS(char **reception, int socket);

#endif
